import axios, { AxiosRequestHeaders } from "axios";
import { ElMessage } from "element-plus";
export const axiosInstance = axios.create({
    baseURL: "/api"
});

//报错问题
declare module 'axios' {
    export interface AxiosResponse<T = any> extends Promise<T> { }
}

//请求拦截器
axiosInstance.interceptors.request.use((req) => {//形参req就是拦截器的前端发送给后端的数据‘
    console.log('req', req);
    const token = localStorage.token;
    if (token) {
        (req.headers as AxiosRequestHeaders).token = token;
    }
    return req;//ret,urn后面的值就是传递给后端的数据

}, () => { });

//响应拦截器
axiosInstance.interceptors.response.use((response) => {//形参response就是拦截的后端返回给前端数据
    //状态码为200的时候，在这里被拦截
    console.log('res-axios 拦截器', response)


    //return后面的值就是给到页面的数据
    // if (response.statusText == "") {
        return response.data;
    // } else {
    //     ElMessage.error("123")
    //     //code为0提示错误 
    //     // response.data.message && ElMessage.error(123);

    //     return Promise.reject(response.data);//这里必须返回失败状态的promise,以控制流程使其跳入catch中
    // }


}, (error) => {
    //状态码不是200的时候会被该回调拦截
    console.log('err-响应拦截器', error)
    //统一的处理http状态名
    switch (error.response.status) {
        case 401:
            localStorage.clear();
            window.location.hash = "#/login"
            return Promise.reject(error.response);
        //...404 500根据业务来
        case 500:
            ElMessage.error(error.response.data.message)
        default: return Promise.reject(error.response);
    }
})